package com.bizmerce.rnd.oms.decision.data;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;

/**
 * 이 BOM은 원산지를 판정하기 위한 BOM으로 어떤 협정의 어떤 기준이 적용되는지를 fta에 담고 있으면
 * 해당 협정 정보를 참고하여 판정을 수행한다.
 * 판정이 종료되면 해당 클래스의 모든 정보를 DB에 저장하여 이력을 관리한다.
 * @author Gyeseon
 *
 */
public class BillOfMaterials {

	/**
	 * 시스템에서 사용할 BOM만의 유일키가 필요 
	 */
	String bomId;
	
	/**
	 * ERP로부터 연계된 일시(YYYYMMDDHH24MISS) length 14
	 */
	String receivedDate;//현재의 날짜 데이터 포맷사용
	
	/**
	 * 해당 BOM에 적용할 협정정보를 담음
	 */
	FreeTradeAgreement fta;//pass
	
	/**
	 * 공급자의 제품 파트넘버
	 */
	String partNo;//엑셀에서 만도품번
	
	/**
	 * 공급처의 제품 파트넘버
	 */
	String partNoOfAlternateSource ;//엑셀에서gm품번
	
	/**
	 * 제품 판매가격: 협정에 따라 FOB 또는 Ex-Works(공장도가격)
	 */
	double salePrice;//엑셀에서판가
	
	/**
	 * 제품 HS CODE
	 */
	HsCode hsCode;//pass
	
	/**
	 * BOM을 구성하고 있는 원자재 아이템
	 */
	List<RawMaterial> rawMaterials;//addRawMaterials로 추가

	
	public String getPartNo() {
		return partNo;
	}

	public void setPartNo(String partNo) {
		this.partNo = partNo;
	}

	public String getPartNoOfAlternateSource() {
		return partNoOfAlternateSource;
	}

	public void setPartNoOfAlternateSource(String partNoOfAlternateSource) {
		this.partNoOfAlternateSource = partNoOfAlternateSource;
	}

	public double getSalePrice() {
		return salePrice;
	}

	public void setSalePrice(double salePrice) {
		this.salePrice = salePrice;
	}

	public List<RawMaterial> getRawMaterials() {
		return rawMaterials;
	}

	public void setRawMaterials(List<RawMaterial> rawMaterials) {
		this.rawMaterials = rawMaterials;
	}
	
	public void addRawMaterials(RawMaterial rawMaterial) {
		if(this.rawMaterials == null) {
			this.rawMaterials = new ArrayList<RawMaterial>();
		}
		this.rawMaterials.add(rawMaterial);
	}

	public HsCode getHsCode() {
		return hsCode;
	}

	public void setHsCode(HsCode hsCode) {
		this.hsCode = hsCode;
	}

	public FreeTradeAgreement getFta() {
		return fta;
	}

	public void setFta(FreeTradeAgreement fta) {
		this.fta = fta;
	}
	
	public String toString() {
		return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
	}
}

